home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 42
/
Amiga Format AFCD42 (Issue 126, Aug 1999).iso
/
-serious-
/
programming
/
other
/
jikes
/
src
/
getclass.h
< prev
next >
Wrap
C/C++ Source or Header
|
1999-05-14
|
4KB
|
148 lines
// $Id: getclass.h,v 1.3 1999/01/25 20:00:29 shields Exp $
//
// This software is subject to the terms of the IBM Jikes Compiler
// License Agreement available at the following URL:
// http://www.ibm.com/research/jikes.
// Copyright (C) 1996, 1998, International Business Machines Corporation
// and others. All Rights Reserved.
// You must accept the terms of that agreement to use this software.
//
#ifndef getclass_INCLUDED
#define getclass_INCLUDED
#include "config.h"
#include "semantic.h"
#include "long.h"
#include "double.h"
class Cp_Info
{
public:
enum
{
CONSTANT_Class = 7,
CONSTANT_Fieldref = 9,
CONSTANT_Methodref = 10,
CONSTANT_InterfaceMethodref = 11,
CONSTANT_String = 8,
CONSTANT_Integer = 3,
CONSTANT_Float = 4,
CONSTANT_Long = 5,
CONSTANT_Double = 6,
CONSTANT_NameAndType = 12,
CONSTANT_Utf8 = 1
};
static u1 Tag(char *buffer) { return (u1) *buffer; }
};
class Constant_Utf8_info : public Cp_Info
{
public:
static u2 Length(char *buffer) { return Semantic::GetU2(buffer + 1); } // skip tag
static char *Bytes(char *buffer) { return buffer + 3; } // skip tag and length
};
class Constant_Class_info : public Cp_Info
{
public:
static u2 NameIndex(char *buffer) { return Semantic::GetU2(buffer + 1); }
};
class Constant_Fieldref_info : public Cp_Info
{
public:
static u2 ClassIndex(char *buffer) { return Semantic::GetU2(buffer + 1); }
static u2 NameAndTypeIndex(char *buffer) { return Semantic::GetU2(buffer + 3); }
};
class Constant_Methodref_info : public Cp_Info
{
public:
static u2 ClassIndex(char *buffer) { return Semantic::GetU2(buffer + 1); }
static u2 NameAndTypeIndex(char *buffer) { return Semantic::GetU2(buffer + 3); }
};
class Constant_InterfaceMethodref_info : public Cp_Info
{
public:
static u2 ClassIndex(char *buffer) { return Semantic::GetU2(buffer + 1); }
static u2 NameAndTypeIndex(char *buffer) { return Semantic::GetU2(buffer + 3); }
};
class Constant_NameAndType_info : public Cp_Info
{
public:
static u2 NameIndex(char *buffer) { return Semantic::GetU2(buffer + 1); }
static u2 DescriptorIndex(char *buffer) { return Semantic::GetU2(buffer + 3); }
};
class Constant_String_info : public Cp_Info
{
public:
static u2 StringIndex(char *buffer) { return Semantic::GetU2(buffer + 1); }
};
class Constant_Integer_info : public Cp_Info
{
public:
static u4 Bytes(char *buffer) { return Semantic::GetU4(buffer + 1); }
static int Value(char *buffer)
{
union field
{
u4 u;
int i;
} value;
value.u = Bytes(buffer);
return value.i;
}
};
class Constant_Float_info : public Cp_Info
{
public:
static u4 Bytes(char *buffer) { return Semantic::GetU4(buffer + 1); }
static IEEEfloat Value(char *buffer)
{
return IEEEfloat(Semantic::GetU4(buffer+1));
}
};
class Constant_Long_info : public Cp_Info
{
public:
static u4 HighBytes(char *buffer) { return Semantic::GetU4(buffer + 1); }
static u4 LowBytes(char *buffer) { return Semantic::GetU4(buffer + 5); }
static LongInt Value(char *buffer)
{
return LongInt(HighBytes(buffer), LowBytes(buffer));
}
};
class Constant_Double_info : public Cp_Info
{
public:
static u4 HighBytes(char *buffer) { return Semantic::GetU4(buffer + 1); }
static u4 LowBytes(char *buffer) { return Semantic::GetU4(buffer + 5); }
static IEEEdouble Value(char *buffer)
{
return IEEEdouble(HighBytes(buffer), LowBytes(buffer));
}
};
#endif